using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools
{
    /// <summary>
    /// <para>Update Diagram</para>
    /// <para>Updates one or more network diagrams that are related to a given utility network or trace network.</para>
    /// <para>更新与给定公共设施网络或追踪网络相关的一个或多个网络逻辑示意图。</para>
    /// </summary>    
    [DisplayName("Update Diagram")]
    public class UpdateDiagram : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public UpdateDiagram()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_diagrams">
        /// <para>Input Network or Network Diagram Layer</para>
        /// <para>The input network diagram layer to update or the utility network or trace network on which the set of specified input diagram names are based to update.</para>
        /// <para>要更新的输入网络逻辑示意图图层或要更新的指定输入逻辑示意图名称集所基于的公共设施网络或追踪网络。</para>
        /// </param>
        public UpdateDiagram(object _in_diagrams)
        {
            this._in_diagrams = _in_diagrams;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Update Diagram";

        public override string CallName => "nd.UpdateDiagram";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_diagrams, _template_names, _diagram_names, _update_option.GetGPValue(), _autolayout_option.GetGPValue(), _out_diagrams];

        /// <summary>
        /// <para>Input Network or Network Diagram Layer</para>
        /// <para>The input network diagram layer to update or the utility network or trace network on which the set of specified input diagram names are based to update.</para>
        /// <para>要更新的输入网络逻辑示意图图层或要更新的指定输入逻辑示意图名称集所基于的公共设施网络或追踪网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network or Network Diagram Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_diagrams { get; set; }


        /// <summary>
        /// <para>Template Names</para>
        /// <para>The names of the templates for which the related diagrams are to be processed.</para>
        /// <para>要处理相关关系图的模板的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Template Names")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _template_names { get; set; } = null;


        /// <summary>
        /// <para>Diagram Names</para>
        /// <para>The names of the diagrams to be processed.</para>
        /// <para>要处理的逻辑示意图的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Diagram Names")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _diagram_names { get; set; } = null;


        /// <summary>
        /// <para>Update inconsistent diagrams only</para>
        /// <para><xdoc>
        ///   <para>Specifies whether to update only diagrams that are inconsistent (the default) or all diagrams regardless of their consistency state.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Only diagrams that are inconsistent will be updated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Both consistent and inconsistent diagrams will be updated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是仅更新不一致的关系图（默认值）还是更新所有关系图，而不考虑其一致性状态。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 仅更新不一致的逻辑示意图。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将更新一致和不一致的逻辑示意图。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update inconsistent diagrams only")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_option_value _update_option { get; set; } = _update_option_value._true;

        public enum _update_option_value
        {
            /// <summary>
            /// <para>INCONSISTENT_DIAGRAMS_ONLY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCONSISTENT_DIAGRAMS_ONLY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>ALL_SELECTED_DIAGRAMS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ALL_SELECTED_DIAGRAMS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Re-apply automatic layouts on the updated diagrams</para>
        /// <para><xdoc>
        ///   <para>Specifies whether automatic layouts that may be configured on the template on which the diagrams are based will be reapplied during the update process. By default, when automatic layouts are specified on a template, they are not reapplied during the update process.
        ///   <bulletList>
        ///     <bullet_item>Checked—The automatic layouts that are configured on the template will be reapplied to diagrams at the end of the update process.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—None of the automatic layouts configured on the template will be reapplied to diagrams during the update process. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在更新过程中是否重新应用可在关系图所基于的模板上配置的自动布局。默认情况下，在模板上指定自动布局时，在更新过程中不会重新应用它们。
        ///   <bulletList>
        ///     <bullet_item>选中 - 在模板上配置的自动布局将在更新过程结束时重新应用于逻辑示意图。</bullet_item><para/>
        ///     <bullet_item>未选中 - 在更新过程中，模板上配置的任何自动布局都不会重新应用于逻辑示意图。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Re-apply automatic layouts on the updated diagrams")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _autolayout_option_value _autolayout_option { get; set; } = _autolayout_option_value._false;

        public enum _autolayout_option_value
        {
            /// <summary>
            /// <para>REAPPLY_AUTOLAYOUT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REAPPLY_AUTOLAYOUT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_REAPPLY_AUTOLAYOUT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_REAPPLY_AUTOLAYOUT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Network or Network Diagram Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network or Network Diagram Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_diagrams { get; set; }


        public UpdateDiagram SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}